package server

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql"
	"go.uber.org/zap"
)

// MySQL mysql
type MySQL struct {
	Acc      string
	Pw       string
	Addr     string
	Port     string
	Database string
	DB       *sql.DB
}

// NewMySQL new sql
func NewMySQL(Acc string, Pw string, Addr string, Port string, Database string) *MySQL {
	return &MySQL{
		Acc:      Acc,
		Pw:       Pw,
		Addr:     Addr,
		Port:     Port,
		Database: Database,
	}
}

var MysqlDb *MySQL

// Start connect mysql
func (mysql *MySQL) Start() {

	log.Println(mysql.Acc, mysql.Pw, mysql.Addr, mysql.Port, mysql.Database)
	// 初始化mysql连接
	sqlConn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", mysql.Acc, mysql.Pw,
		mysql.Addr, mysql.Port, mysql.Database)
	DB, err := sql.Open("mysql", sqlConn)
	if err != nil {
		Logger.Panic("mysql", zap.Error(err), zap.String("sqlConn", sqlConn))
	}

	// 测试db是否正常
	err = DB.Ping()
	if err != nil {
		Logger.Panic("mysql", zap.Error(err))
	}
	mysql.DB = DB
	MysqlDb = mysql
}

// Close stop sql
func (mysql *MySQL) Close() error {
	if mysql.DB != nil {
		err := mysql.DB.Close()
		if err != nil {
			Logger.Error("mysql", zap.Error(err))
			// log.Println(err)
		}
	}
	return nil
}
